﻿#include<iostream>
using namespace std;
typedef int STDataType;
class Stack
{
public:
	Stack(int n = 4)
	{
		_a = (STDataType*)malloc(sizeof(STDataType) * n);
		if (nullptr == _a)
		{
			perror("malloc申请空间失败");
			return;
		}
		_capacity = n;
		_top = 0;
	}
	Stack(const Stack& st)// 深拷贝(对指向的资源也进行拷贝)
	{
		_a = (STDataType*)malloc(sizeof(STDataType) * st._capacity);
		if (nullptr == _a)
		{
			perror("malloc申请空间失败!!!");
			return;
		}
		memcpy(_a, st._a, sizeof(STDataType) * st._top);
		_top = st._top;
		_capacity = st._capacity;
	}
	~Stack()
	{
		free(_a);
		_a = nullptr;
		_top = _capacity = 0;
	}
private:
	STDataType* _a;
	size_t _capacity;
	size_t _top;
};

// 两个Stack实现队列
class MyQueue
{
public:
private:
	Stack pushst;
	Stack popst;
};

int main()
{
	MyQueue q1;
	// MyQueue⾃动⽣成的拷⻉构造函数，会⾃动调⽤Stack拷⻉构造完成pushst/popst的拷⻉，
	// 只要Stack拷⻉构造⾃⼰实现了深拷⻉， MyQueue⾃动⽣成的拷⻉构造函数就没问题
	MyQueue q2 = q1;

	return 0;
}




